#include <iostream>
using namespace std;

/*
	友元函数：分为两种
	     第一种：普通函数作为类的友元函数(简单)
		 第二种：成员函数作为类的友元函数(复杂)
	感慨：儿子都干不了的事情，朋友可以，我想不通
	Dog有个成员函数，该成员函数想要访问/修改猫的私有成员变量
	语法错误：
	    编译器从上到下，从左到右检查语法
*/
//前向引用声明：提前打个招呼，告诉编译器我有定义Cat这个类
//前向引用声明的缺陷：只能告知Cat类的存在，但是这个类具体有什么成员无法得知
class Cat;

class Dog
{
public:
	void showCat(Cat &other);

};

class Cat
{
public:
	Cat(string _name,int _age)
	{
		name=_name;
		age=_age;
	}
	friend void Dog::showCat(Cat &other);
private:
	int age;
	string name;
};

void Dog::showCat(Cat &other)
{
	cout<<"狗可以查看猫的姓名: "<<other.name<<endl;
	cout<<"狗可以查看猫的年龄: "<<other.age<<endl;
}


int main()
{
	Cat c1("旺财",5);
	Dog d1;
	d1.showCat(c1);	
}